package com.campus.counseling.service;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.campus.counseling.model.dto.PsychologicalTestDTO;
import com.campus.counseling.entity.PsychologicalTest;
import com.campus.counseling.entity.TestQuestion;
import com.campus.counseling.model.query.PsychologicalTestQuery;
import com.campus.counseling.model.vo.PsychologicalTestVO;
import com.campus.counseling.model.vo.TestQuestionVO;

import java.util.List;
import java.util.Map;

/**
 * 心理测试服务接口
 */
public interface PsychologicalTestService extends IService<PsychologicalTest> {

    List<PsychologicalTestVO> getTestsByType(String type);

    /**
     * 获取所有测试类型
     * @return 测试类型列表
     */
    List<String> getAllTestTypes();

    /**
     * 更新测试类型
     * @param testId 测试ID
     * @param testType 测试类型
     * @return 是否更新成功
     */
    boolean updateTestType(Long testId, String testType);

    /**
     * 批量更新测试类型
     * @param testIds 测试ID列表
     * @param testType 测试类型
     * @return 是否更新成功
     */
    boolean batchUpdateTestType(List<Long> testIds, String testType);

    /**
     * 获取测试类型统计
     * @return 测试类型统计（类型 -> 数量）
     */
    Map<String, Integer> getTestTypeStatistics();

    Page<PsychologicalTestVO> list(PsychologicalTestQuery query);
    PsychologicalTestVO getTest(Long id);
    void add(PsychologicalTestDTO dto);
    void update(Long id, PsychologicalTestDTO dto);
    void delete(Long id);
    void updateStatus(Long id, Integer status);

    Long startTest(Long id);

    List<TestQuestionVO> getQuestions(Long testId);
    PsychologicalTestVO convertToVO(PsychologicalTest test);

    /**
     * 获取测试的维度列表
     * @param testId 测试ID
     * @return 维度列表，每个维度包含 dimensionKey（维度代码）和 dimensionName（维度名称）
     */
    List<Map<String, Object>> getTestDimensions(Long testId);
} 